﻿/**
 * 通用js方法封装处理
 * Copyright (c) 2019 ruoyi
 */
import { getToken } from '@/utils/auth'
import { baseURL } from '@/utils/request'

// 日期格式化
export function parseTime(time, pattern) {
  if (arguments.length === 0 || !time) {
    return null
  }
  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
      time = parseInt(time)
    } else if (typeof time === 'string') {
      time = time.replace(new RegExp(/-/gm), '/')
    }
    if ((typeof time === 'number') && (time.toString().length === 10)) {
      time = time * 1000
    }
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') {
      return ['日', '一', '二', '三', '四', '五', '六'][value]
    }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return time_str
}

// 表单重置
export function resetForm(refName) {
  if (this.$refs[refName]) {
    this.$refs[refName].resetFields()
  }
}

// 添加日期范围
export function addDateRange(params, dateRange) {
  const search = params
  search.start = undefined
  search.end = undefined
  if (dateRange != null && dateRange.length > 0) {
    search.start = this.dateRange[0]
    search.end = this.dateRange[1]
  }
  return search
}

// 回显数据字典
export function selectDictLabel(datas, value) {
  const actions = []
  Object.keys(datas).some((key) => {
    if (datas[key].codeValue === ('' + value)) {
      actions.push(datas[key].codeName)
      return true
    }
  })
  return actions.join('')
}

// 回显数据字典（字符串数组）
export function selectDictLabels(datas, value, separator) {
  var actions = []
  var currentSeparator = undefined === separator ? ',' : separator
  var temp = value.split(currentSeparator)
  Object.keys(value.split(currentSeparator)).some((val) => {
    Object.keys(datas).some((key) => {
      if (datas[key].codeValue === ('' + temp[val])) {
        actions.push(datas[key].codeName + currentSeparator)
      }
    })
  })
  return actions.join('').substring(0, actions.join('').length - 1)
}

// 通用下载方法
export function download(path) {
  window.location.href = baseURL + path + '?token=' + getToken()
  // window.location.href = baseURL + path
}

// 字符串格式化(%s )
export function sprintf(str) {
  var args = arguments
  var flag = true
  var i = 1
  str = str.replace(/%s/g, function() {
    var arg = args[i++]
    if (typeof arg === 'undefined') {
      flag = false
      return ''
    }
    return arg
  })
  return flag ? str : ''
}

// 转换字符串，undefined,null等转化为""
export function praseStrEmpty(str) {
  if (!str || str == 'undefined' || str == 'null') {
    return ''
  }
  return str
}

/**
 * 构造树型结构数据
 * @param {*} data 数据源
 * @param {*} id id字段 默认 'id'
 * @param {*} parentId 父节点字段 默认 'parentId'
 * @param {*} children 孩子节点字段 默认 'children'
 * @param {*} rootId 根Id 默认 0
 */
export function handleTree(data, id, parentId, children, rootId) {
  id = id || 'id'
  parentId = parentId || 'parentId'
  children = children || 'children'
  rootId = rootId || Math.min.apply(Math, data.map(item => {
    return item[parentId]
  })) || 0
  // 对源数据深度克隆
  const cloneData = JSON.parse(JSON.stringify(data))
  // 循环所有项
  const treeData = cloneData.filter(father => {
    const branchArr = cloneData.filter(child => {
      // 返回每一项的子级数组
      return father[id] === child[parentId]
    })
    branchArr.length > 0 ? father.children = branchArr : ''
    // 返回第一层
    return father[parentId] === rootId
  })
  return treeData !== '' ? treeData : data
}

export function getObject(array, key, keyValue) {
  return array.find((value) => {
    return value[key] === keyValue
  })
}

export function formatValue(value, errValue = '--') {
  const number = parseFloat(value)
  if (isNaN(number) === false) {
    return parseFloat(number.toFixed(1))
  } else {
    return errValue
  }
}

export function handleTreeByType(data, parentId, parentName, childId, childName, children = 'children') {
  const cloneData = JSON.parse(JSON.stringify(data))
  const tempArr = []
  const newArr = []
  debugger
  for (let i = 0; i < cloneData.length; i++) {
    if (tempArr.indexOf(cloneData[i][parentId]) === -1) {
      newArr.push({
        [parentId]: cloneData[i][parentId],
        [parentName]: cloneData[i][parentName],
        [childId]: cloneData[i][parentId],
        [childName]: cloneData[i][parentName],
        [children]: [cloneData[i]]
      })
      tempArr.push(cloneData[i][parentId])
    } else {
      for (let j = 0; j < newArr.length; j++) {
        if (newArr[j][parentId] === cloneData[i][parentId]) {
          newArr[j][children].push(cloneData[i])
          break
        }
      }
    }
  }
  debugger
  return newArr
}

/**
 * 星期
 * @returns {string}
 */
function getWeekDate() {
  var now = new Date()
  var day = now.getDay()
  var weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
  var week = weeks[day]
  return week
}

/**
 * 当前时间
 * @returns {string}
 */
export function currentTime() {
  let dateTime
  const yy = new Date().getFullYear()
  const mm = new Date().getMonth() + 1
  const dd = new Date().getDate()
  const hh = new Date().getHours()
  const mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes()
  const ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds()
  dateTime = yy + '/' + mm + '/' + dd + ' ' + getWeekDate() + ' ' + hh + ':' + mf + ':' + ss
  return dateTime
}

export function removePageParams(params) {
  const cloneData = JSON.parse(JSON.stringify(params))
  delete cloneData.pageNum
  delete cloneData.pageSize
  return cloneData
}
